Lesson 1

Python Basic, Lesson 1,

  • v1.0.1, 2016.12 by David Yi
  • v1.0.2, 2017.2 edit by Eamon Zhang
  • v1.0.3, 2018.2 edit by David Yi
  • v1.0.4, 2018.12 edit by David Yi
  • v1.1, 2020.2,3,4 edit by David Yi

本课内容要点

  • Python 简介
    • Python 是什么
    • 创始人
    • 版本
    • Python 能做什么
    • Python 的优点和缺点
    • Python 的设计哲学
    • 提高编程能力的体会
  • 怎么运行 Python
    • 使用标准的 Python 和 IDLE
    • anaconda 介绍
    • Jupyter Notebook介绍
    • Pycharm 介绍
    • Visual Studio Code 介绍

Python 简介

Python 是什么

下面的定义来自维基百科,https://zh.wikipedia.org/wiki/Python

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆 创造,第一版发布于 1991 年。可以视之为一种改良 (加入一些其他编程语言的优点,如面向对象) 的 LISP。作为一种解释型语言,Python 的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于 C++ 或 Java,Python 让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

与 Scheme、Ruby、Perl、Tcl 等动态类型编程语言一样,Python 拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。其本身拥有一个巨大而广泛的标准库。

Python 虚拟机本身几乎可以在所有的操作系统中运行。Python 的正式解释器CPython是用 C语言编写的、是一个由社区驱动的自由软件,目前由 Python软件基金会管理。

上面这些 Python 语言的介绍,如果看了有点晕,不知所云,也没关系,不影响对 Python 的学习。

创始人

Python 的创始人为吉多·范罗苏姆(Guido van Rossum),是一个非常可爱的荷兰人,不像其他很多目前常用的语言的创始者都退隐江湖那样,Python 的创始者至今还是把握着Python 发展的方向。在 2018年,Rossum 宣布不再参与 Python 的发展,而是改成一个小组。在 2019 年,他又宣布退出 Python 语言的具体工作。在复杂项目的技术方向和进度方面,Rossum 是我学习的榜样之一,可以带领这么大的社区持续的迭代更新,平衡民主与集中,甚至不以经济目的为主要目标,非常厉害的管理能力。

版本

Python 2.0 于 2000年10月16日发布,增加了实现完整的垃圾回收,并且支持 Unicode。同时,整个开发过程更加透明,社区对开发进度的影响逐渐扩大。目前 2.x系列的最新版本是 2.7.18,2.x系列将在 2020年4月被停止支持。还有不少以前的项目使用 Python 2.x系列开发并且维护着,不过这几年很多新项目已经都不支持 Python 2.x 了,所以建议大家不要再学习 Python 2.x 了。对于现在学习 Python 的朋友来说,已经不太需要了解 Python 2 和 Python 3 的差异了,肯定 Python 3 要好得多,知道这个就够了。

Python 3.0 于 2008年12月3日发布,此版不完全兼容之前的Python源代码。Python 3.7.x 系列发布于 2018年10月。3.7.x 系列相比之前的 3.6.x 系列,新功能增加的频率快了不少。目前 Python 的最新稳定版本是 3.8.x 系列,3.8.1 发布于 2019年12月。一般教学我们会用 3.7.x 或者 3.8.x 系列,在绝大多数场景下都没有什么问题,一般不会碰到 3.8.x 系列支持的新特性带来的问题。

Python 能做什么?

Python 能做的事情很多,否则也不会在这几年这么热门。Python 是一门计算机语言,和其他编程语言各有优势,按照国外网友的一些总结,Python 在以下方面有一定优势,如果你正好是想开发相关的程序,可以更加关注一下。

  1. Web 开发:不管是 web 网站,还是api 接口,或者微服务,以及现在流行的 Serverless,Python 都很强大,老牌的 Python 框架 Django 和 Flask不论,近几年又涌现出相当多的 web 框架,可以非常快速的开发 web 程序。现在已经是一个线上的时代,Python 这方面与时俱进。

  2. 计算机视觉: 可以用一个通用的框架叫做 Opencv 来做很多高级的图形和视觉处理。我的团队在 2016 年的时候使用 Python+Opencv 做当时刚兴起的人脸识别、图像识别等。

  3. 网络爬虫: 这也是 Python 非常强悍的功能,并且几乎在所有语言中没有什么对手,这个要归功于在网络处理领域里面,Python 有两个神一般的框架 Requests 和 Scrapy,如果要进行网络爬虫的学习研究,Python 是最好的语言。

  4. 机器学习: 这个就不用多说了,也是目前 Python 火起来的重要原因之一,目前绝大多数机器学习的项目还是用 Python 开发,老牌的有 scikit-learn、theano、tensorflow 这些框架,这两年 PyTorch 非常火红,有后来追上的趋势。

  5. 数据分析: 除了机器学习以外,Python 大热的另外一个原因就是数据分析,同样有一个神级的框架,叫做 Pandas,通过极致优化的性能和易用性,凭借一己之力将 R 语言打的落花流水。

等等,还有很多方面,这里就不一一列举了。

Python 的优点和缺点

优点

  1. 软件质量
    注重可读性,被称作“可执行的伪代码”。比一般脚本语言高很多可维护性和可重用性。极简主义的设计思想,尽管实现一个任务可能有很多种方法,往往只有一种方法是显而易见的,明了的解决办法胜于“魔术”般的方法。

  2. 提高开发者的效率
    代码大小只有C++、Java 的1/3-1/5,意味着可以输入、调试和维护更少的代码。 Python 代码是可立即执行代码,无须传统编译语言或静态语言的编译与链接步骤,意味着修改代码直接看到效果,具有快速调整能力。

  3. 可移植性
    大多数 Python 程序不做任何改变即可在各类平台上运行,Windos 或者 macOS 都可以。

  4. 标准库/第三方库的支持
    有众多成熟的功能模块,包括网站开发、数值计算、服务器应用、数据库应用、游戏开发、Web、人工智能等各个方面,特别是前几年 Python 在人工智能、机器学习、数据统计方面大放异彩,这也归功于一些非常优秀的第三方库。现在 Python 已经面临和 Java、JavaScript 差不多的问题了,优秀的库太多,不知道选哪一个合适。

  5. 组件集成
    轻松与其他应用程序进行通信。可以调用C/C++的库,也可以被C/C++调用,也可以和 Java 集成。这几年随着像 Go 这样一些新的编译型语言发展, 很多语言都可以给 Python 写库函数。

  6. 简单易学,非常适合编程初学者 支持所有现代编程语言的特性,但是也适当做了简化,在学习曲线、程序效果、程序性能上做到了较好的平衡。

缺点

  1. 执行速度不够快(与 C/C++,Java 等相比)
    Python 标准实现方式是将源代码的语句转换为字节码,再将字节码解释出来。但没有将代码编译为底层的二进制代码,所以速度比较慢。

  2. 本地图形化应用能力还不够 Python 有好几种开发本地图形化应用程序的方法,但是和当年的 Visual Basic 和 Delphi 等神器相比,差距还很大。Python 开发 web 页面和服务端程序,进行数据处理和分析,人工智能建模、训练和实战,或者做一些小工具都是没问题的,但是高效率的开发漂亮的图形化应用还有一段路要走。

  3. 在很多领域,优秀的第三方库太多,选择困难。前面说了,这个算是甜蜜的烦恼吧

2020.3 补充:过去Python 有个缺点就是是性能不够强,相比较 Java、Go 语言等速度不够快,最近两年,Python 语言发展非常快,在 Python 3.5 版本之后,通过异步处理等方式,性能大大提升,用在服务端处理高并发也足够胜任,我们会在之后高级教程中介绍这些内容。对于一般应用,Python 的性能是足够的。

2020.4 补充:影响一个项目在实际运营时候速度和性能的因素非常多,这是一个非常有趣的话题,对于一般学习 Python 的朋友来说,不需要研究的太深,我们在之后的高级教程中会分析一下 Python 应用程序链路上的性能监测和提升。

Python 的设计哲学

Python 的设计哲学是“优雅”、“明确”、“简单”。Python 开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择明确的、没有或者很少有歧义的语法。

在 Python 解释器内运行 import this,可以看到如下的内容,称之为 Python 之禅。(之后等 Python 环境安装好之后可以看看)

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Python 之禅的中文翻译如下:

优美优于丑陋,
明了优于隐晦;
简单优于复杂,
复杂优于凌乱,
扁平优于嵌套,
稀疏优于稠密,
可读性很重要!
即使实用比纯粹更优,
特例亦不可违背原则。
错误绝不能悄悄忽略,
除非它明确需要如此。
面对不确定性,拒绝妄加猜测。
任何问题应有一种,且最好只有一种,显而易见的解决方法。
尽管这方法一开始并非如此直观,除非你是荷兰人。
做优于不做,
然而不假思索还不如不做。
很难解释的,必然是坏方法。
很好解释的,可能是好方法。
命名空间是个绝妙的主意,我们应好好利用它。

提高编程能力的体会

在看这个教程的朋友,肯定是想学习 Python,看看它到底好学么?能做什么?或许也有一些创意想去实现。我们不能承诺学好 Python 之后月薪年薪多少的话,如果你想做一个程序员,或者想用程序来改变一些事情,分享一些心得体会。

  • 世界观和人生观

我相信电脑技术是改变了世界的现在和未来,如同当年发明电、发明汽车一样,电脑从 1945 年发明到现在,也只有几十年。电脑技术还会有巨大的跃进,我们有幸可以目睹和参与这个过程。作为程序员,使用编程技术来让生活更美好、工作效率更高。我们需要不断学习,有分享精神,并不能把编程技术只是作为一个谋生工具,只是赚钱。用技术来改变世界,让世界变得更加美好。没有几个是天才,或许我们的技术能力也不是那么强,但是,信念要存在,要有理想,一砖一瓦,一起构筑高楼大厦。

  • 天赋和勤奋

刚才说到,天才是不多的,我们需要更多的还是勤奋。每个人都有不同的天赋,有的人擅长逻辑思维,有的人语言文字能力很强。在学习编程领域里面也是,其实光是编程,从前端开发到后端设计和架构师,可以细分十几种岗位,各种各样的编程语言更是五花八门。学习的过程是艰苦的,就算再容易入门的语言,比如 Python,也是入门容易精通难,更不说那些入门也不容易的语言了。好在计算机科学家和全世界的程序员不断地在努力,降低编程语言的学习成本,提升编程语言的功能,作为学习编程,我们已经比二十年、十年前幸福多了。所以,加上你的勤奋,开始梦想。

  • 阅读

多看书,多看文章,多看代码。现在是一个快知识的时代,很多人不太愿意静下心来看书,那么阅读还包括看一些视频教程。介质的形态并不是最重要的,与时俱进。

  • 实践,实践,再实践

学习编程就像学习外语一样,要多实践,光是看代码是不够的。一开始可以跟着教程,将代码原原本本的输入,看看运行结果。在这个过程中,因为可能发生输入错误之类,所以可以掌握很多细节,这是非常重要的。再复杂的程序也是从一行行的基础代码开始累积的。而基本功的扎实与否在你以后的编程学习乃至工作中就会很有用处。学习到一定程度之后,可以自己写点小程序来解决一些简单问题,用程序来创造一些东西。

  • 提问题,会搜索

编程学习中有时候会需要一些或许傻傻的问题,或许一些别人没碰到过的问题,我们可以依靠搜索引擎来寻找答案。首选 Google 来搜索,准确度高很多。程序员还有专门的搜索引擎,比如 Stack Overflow,准确度非常高,个人经验几乎所有编程问题都可以在 Stack Overflow找到答案。老外这方面比较好,愿意回答问题、分享使用经验。

如何运行 Python

简单的给大家介绍一下 Python 程序怎么运行,便于之后的学习

  • 准备工作
  • 使用标准的 Python 和 IDLE
  • anaconda 介绍
  • Jupyter Notebook
  • Jetbrain PyCharm
  • Microsoft VS Code

怎么运行 Python

  • 下载安装 Python 最新版本。除非你原来安装过Python,并且由于一些原因一定要用Python 的官方版本,从学习和一般开发角度都不推荐直接安装官方Python了。使用下面安装 anaconda 的方法比较好。

  • 或者下载安装 anaconda 最新版本。anaconda 是一个强大的、开源的 Python 整体解决方案,包括最新版本的 Python、jupyter等各类工具、精选的 Python 第三方库等。目前 anaconda 也包含了 Microsoft 开源的 VSCode开发工具。

使用标准的 Python 和 IDLE

Python 官网 (www.python.org) 还是可以看一下的。目前 Python 进入到了 3.8+ 系列,不建议再使用 2.x 系列了,有不少项目习惯用 Python 2.7.x,Python 官方已经明确除了安全补丁以外,不会继续支持 2.7.x 系列,所以如果是初学者,就直接选择 Python 3,目前所有的开发工具、第三方函数包等都对 Python 3.x 版本很友好。

截止 2020 年 2 月,python 最新版本是 3.8.1,而 3.9 版本也在测试中了。

从 Python 官网的 download 链接开始,以 Python 3.5.1 为例,简单介绍一下如何安装。

Windows 操作系统只需要下载32位版本即可,对于 Python 的学习不会有任何影响,macOS 电脑下载对应的最新版本就可以了。

以 Windows 操作系统举例,下载后,执行安装程序,如下:

一般情况下不用做任何修改,几分钟就安装好了,如下:

安装好后,在开始菜单找到 Python 3.8 程序组,看到其中的 IDLE(Python 3.8 32bit),运行后就会出现下面的 Python 命令行界面:

可以在这里进行输入 Python 程序,正确的话,会执行。

不过在这个类似 shell 的环境里面编辑复杂的 python 程序会比较麻烦,所以,可以在 shell 的 File 菜单里面选择第一项 New File,这时候,一个编辑器窗口就出现了。

在编辑器里可以编写比较长的程序,选择菜单 Run 里面的 Run Module,就可以运行程序,结果会显示在一个 shell 窗口中,就像下面这样,注意在运行程序前是需要保存程序文件的。


anaconda 介绍

对于初学者,Python 的安装也许并不容易,尤其面临 Python 版本的问题,会浪费很多时间,甚至让人放弃的感觉,anaconda 是一种简便的安装方法,可以完美的兼容 Python 2.7 和 Python 3.x,并集成了许多 packages(第三方包),免去配置环境变量的烦恼,

anaconda的优势如下:

  • 集成很多第三方库,省去一一下载的麻烦;
  • anaconda 的 conda 命令除了可以安装第三方库以外,还可以将 Python 环境作为安装内容的一部分,因此一台电脑上配置多个 Python 开发环境非常容易;
  • PyCharm、VSCode 等都直接支持 conda 配置;
  • 自带很多强大工具,比如数据分析、机器学习等;

anaconda的下载地址:https://www.continuum.io/downloads

选择操作系统和版本就可以。国内下载 anaconda 速度比较慢,可以通过镜像地址下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/

anaconda 最新版本是 2020.02 版本。

有了 anaconda 之后,安装多个 Python版本、升级 Python 等都会比较容易。


Jupyter 介绍

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本。Jupyter Notebook 是一款开源的网络应用,我们可以将其用于创建和共享代码与文档。

Jupyter 提供了一个环境,无需离开这个环境,就可以在其中编写代码、运行代码、查看输出、可视化数据并查看结果。因此,这是一款可执行端到端的数据科学工作流程的便捷工具,其中包括数据清理、统计建模、构建和训练机器学习模型、可视化数据等等。当然,对于学习编程来说 Jupyter 同样是一个非常好的工具。

当还处于原型开发阶段时,Jupyter Notebook 的作用更是引人注目。因为代码是按独立单元(cell)的形式编写的,而且这些单元是独立执行的。这让用户可以测试一个项目中的特定代码块,而无需从项目开始处执行代码。对于通过 Python 来学习和探索的项目来说,特别适合。对于其他 Python 比较复杂的项目开发可能 IDE 开发工具更加适合。

如果安装了 anaconda,只要执行jupyter notebook 就可以启动 Jupyter 的服务端。或者启动 anaconda-navigator 这个图形化导航工具,来执行 Jupyter。

如果没有安装 anaconda,可以执行pip install jupyter ,来安装 Jupyter,其实它也是 Python 的一个第三方扩展包。

这里所有的教程都推荐使用 Jupyter Notebook 方式来访问和学习。

PyCharm 介绍

Python 的 IDE 开发环境大概至少有几十个,一般的学习、调试用 Python 自带的 shell、IDLE 即可,用 Jupyter notebook 也可以满足很多需求。

真正的项目开发还是需要专业的编辑器,推荐 PyCharm,分为商业版本和免费的教育版本,免费版本用在一般的项目开发绰绰有余。

PyCharm 目前最新版本是 2020.1,下载链接:https://www.jetbrains.com/pycharm/download/

VS Code 介绍

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows、Linux 和 macOS 等操作系统且开放源代码的代码编辑器,它支持测试,并内置了 Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于 IntelliSense)、代码片段和代码重构等。该编辑器支持用户个性化配置,例如改变主题颜色、键盘快捷方式等各种属性和参数,同时还在编辑器中内置了扩展程序管理的功能。

在2019年的Stack Overflow 组织的开发者调研中,VS Code被认为是最受开发者欢迎的开发环境,据调查87317名受访者中有50.7%的受访者声称正在使用 VS Code。

微软是一个非常强大的软件公司,隔一段时间就会有一些惊艳之作。VS Code 也是其中之一。